$(document).ready(function(){
	
	$('#txtuname').bind('keydown focus blur', function () {
		var regex = /^[A-Za-z0-9_]{5,20}$/;
		var user_name = $('#txtuname').val();
		var length = user_name.length;
		
	    if( length < 5 || length > 20 ){
	        $('#user-alert').html('Tên đăng nhập phải từ 5-20 ký tự.');
	    } else if ( regex.test(user_name) == false ){
	    	$('#user-alert').html('Tên đăng nhập không hợp lệ.');
	    } else
	    {
	    	checkUserExisted(user_name);
	    }
	});
	
	$('#email_1').bind('keydown focus blur', function () {
		var email = $('#email_1').val();
		checkEmail(email);
	});
	
	$('#changepass_password').bind('blur', function () {
		var pass = $('#changepass_password').val();
		checkPassExisted(pass);
	    return false;
	});
	
	$('#txt_change_newpass1').bind('keydown keyup keypress', function (){
		var pass = $('#txt_change_newpass1').val();
		var length = pass.length;
		
	    if( length < 6 ){
	        $('#pass_alert1').html('Mật khẩu phải từ 6 ký tự trở lên.');
	    } else if ( length > 20 ){                                         
	        $('#pass_alert1').html('Mật khẩu phải ít hơn 21 ký tự.');
	    }else
	    {
	    	$('#pass_alert1').html('');
	    }
		checkPassword(pass, '#measurement-pass');
	});
	
	$('#txt_change_newpass2').bind('keydown keyup keypress', function (){
		var pass1 = $('#txt_change_newpass1').val();
		var pass2 = $('#txt_change_newpass2').val();
		
		if(pass1 != pass2){
	        $('#pass-alert2').html('Mật khẩu không khớp');
	    }else
	    {
	    	 $('#pass-alert2').html('');
	    }
	    	
	});
	
});

function checkEmail(email)
{
	$.ajax({
		type: 'POST',
		url: base_url+'ajax/ajaxCheckEmail/',
		data: 'status=check&type=email&email='+email,
		success: function (str){
		
		 	if (str.indexOf("{") != '0')
		 	{
		 		$('#mail_alert').html('Có lỗi trong quá trình xử lý dữ liệu.');
		 		return false;
		 	}else
		 	{
		 		var getData = $.parseJSON(str);
		 		if (getData.code == '1')
		 		{
		 			$('#mail_alert').html('Bạn có thể sử dụng email này.');
		 		}else if (getData.code == '501')
		 		{
		 			$('#mail_alert').html('Email không hợp lệ.');
		 		}else if (getData.code == '0')
		 		{
		 			$('#mail_alert').html('Email đã được sử dụng.');
		 		}
		 	}
		 		
		}, 
		error: function (){
			alert('Lỗi xử lý dữ liệu.');
			return false;
		}
	});
}

function checkUserExisted(user_name){
	if (user_name.length != 0)
	{
		$.ajax({
			type: 'POST',
			url: base_url+'ajax/ajaxCheckUser/',
			data: 'status=check_user&user_name='+user_name,
			success: function (str){
			 	if (str.indexOf("{") == '1')
			 	{
			 		alert('Lỗi trong quá trình xử lý dữ liệu');
			 		return false;
			 	}else
			 	{
			 		var getData = $.parseJSON(str);
			 		
			 		if (getData.code == '1')
			 		{
			 			$('#user-alert').html('Bạn có thể sử dụng tài khoản này.');
			 		}else if (getData.code == '0')
			 		{
			 			$('#user-alert').html('Tài khoản này đã có người đăng ký.');
			 		}else if (getData.code == '2')
			 		{
			 			$('#user-alert').html('Có lỗi trong quá trình xử lý.');
			 		}
			 	}
			 		
			}
		});
	}
	return false;
}

function checkPassExisted(pass){
	
	if (pass.length != 0)
	{
		$.ajax({
			type: 'POST',
			url: base_url+'ajax/ajaxCheckUserPass/',
			data: 'status=check_pass&pass='+pass,
			success: function (str){
			
			 	if (str.indexOf("{") != '0')
			 	{
			 		$('#pass_alert').html('Có lỗi trong quá trình xử lý dữ liệu.');
			 		return false;
			 	}else
			 	{
			 		var getData = $.parseJSON(str);
			 		if (getData.code == '1')
			 		{
			 			$('#pass_alert').html('');
			 		}else if (getData.code == '0')
			 		{
			 			$('#pass_alert').html('Password không đúng.');
			 		}else if (getData.code == '2')
			 		{
			 			$('#pass_alert').html('Có lỗi trong quá trình xử lý.');
			 		}
			 	}
			 		
			}, 
			error: function (){
				alert('Lỗi xử lý dữ liệu.');
				return false;
			}
		});
	}
	return false;
}


function checkPassword(passwd, id_txt_pass)
{
    var intScore   = 0
    var strVerdict = "weak"
    var strLog     = ""

    // PASSWORD LENGTH
    if (passwd.length<5)                         // length 4 or less
        {
        intScore = (intScore+3)
        strLog   = strLog + "3 points for length (" + passwd.length + ")\n"
    }
    else if (passwd.length>4 && passwd.length<8) // length between 5 and 7
        {
        intScore = (intScore+6)
        strLog   = strLog + "6 points for length (" + passwd.length + ")\n"
    }
    else if (passwd.length>7 && passwd.length<16)// length between 8 and 15
        {
        intScore = (intScore+12)
        strLog   = strLog + "12 points for length (" + passwd.length + ")\n"
    }
    else if (passwd.length>15)                    // length 16 or more
        {
        intScore = (intScore+18)
        strLog   = strLog + "18 point for length (" + passwd.length + ")\n"
    }


    // LETTERS (Not exactly implemented as dictacted above because of my limited understanding of Regex)
    if (passwd.match(/[a-z]/))                              // [verified] at least one lower case letter
        {
        intScore = (intScore+1)
        strLog   = strLog + "1 point for at least one lower case char\n"
    }

    if (passwd.match(/[A-Z]/))                              // [verified] at least one upper case letter
        {
        intScore = (intScore+5)
        strLog   = strLog + "5 points for at least one upper case char\n"
    }

    // NUMBERS
    if (passwd.match(/\d+/))                                 // [verified] at least one number
        {
        intScore = (intScore+5)
        strLog   = strLog + "5 points for at least one number\n"
    }

    if (passwd.match(/(.*[0-9].*[0-9].*[0-9])/))             // [verified] at least three numbers
        {
        intScore = (intScore+5)
        strLog   = strLog + "5 points for at least three numbers\n"
    }


    // SPECIAL CHAR
    if (passwd.match(/.[!,@,#,$,%,^,&,*,?,_,~]/))            // [verified] at least one special character
        {
        intScore = (intScore+5)
        strLog   = strLog + "5 points for at least one special char\n"
    }

    // [verified] at least two special characters
    if (passwd.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/))
        {
        intScore = (intScore+5)
        strLog   = strLog + "5 points for at least two special chars\n"
    }


    // COMBOS
    if (passwd.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))        // [verified] both upper and lower case
        {
        intScore = (intScore+2)
        strLog   = strLog + "2 combo points for upper and lower letters\n"
    }

    if (passwd.match(/([a-zA-Z])/) && passwd.match(/([0-9])/)) // [verified] both letters and numbers
        {
        intScore = (intScore+2)
        strLog   = strLog + "2 combo points for letters and numbers\n"
    }

    // [verified] letters, numbers, and special characters
    if (passwd.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/))
        {
        intScore = (intScore+2)
        strLog   = strLog + "2 combo points for letters, numbers and special chars\n"
    } 


    // set pass word
    if(intScore < 16)
        {
        // strVerdict = "very weak";
        strVerdict = '<div class="lv3"></div><div class="lv3"></div><div class="lv3"></div><div class="lv3"></div><span>Cực yếu</span>'; //'<span>Pass Gì Lởm Thế</span>';
    }
    else if (intScore > 15 && intScore < 25)
        {
        // strVerdict = "weak";
        strVerdict = '<div class="lv2"></div><div class="lv2"></div><div class="lv2"></div><div class="lv3"></div><span>Yếu</span>'; //'<span>Yếu</span>';
    }
    else if (intScore > 24 && intScore < 35)
        {
        // strVerdict = "mediocre";
        strVerdict = '<div class="lv1"></div><div class="lv2"></div><div class="lv2"></div><div class="lv2"></div><span>Trung bình</span>'; //'<span>cung tạm được</span>';
    }
    else if (intScore > 34 && intScore < 45)
        {
        // strVerdict = "strong";
        strVerdict = '<div class="lv1"></div><div class="lv1"></div><div class="lv1"></div><div class="lv2"></div><span>Tốt</span>'; //'<span>Tốt</span>';
    }
    else
        {
        // strVerdict = "stronger";
        strVerdict = '<div class="lv1"></div><div class="lv1"></div><div class="lv1"></div><div class="lv1"></div><span>Cực tốt</span>'; // <span>Cực an toàn</span>;
    }

    jQuery(id_txt_pass).html( strVerdict );

    // console.log( strVerdict );
    // document.forms.passwordForm.strong.value = (intScore)
    // document.forms.passwordForm.verdict.value = (strVerdict)
    // document.forms.passwordForm.matchlog.value = (strLog)

}
